#include <iostream>
#include <iterator>
#include <vector>

using std::cout;
using std::endl;
using std::cin;
using std::istream_iterator;
using std::ostream_iterator;
using std::vector;

void test0()
{
    //1、vector为空的时候，一定不要使用下标操作，因为已经越界了，如果只是
    //读操作还没有问题，但是要进行写操作，那么会有内存越界、踩踏的风险
    //2、vector中在进行使用的时候，一定要分配内存，或者函数在调用的时候可以
    //自动分配内存,否则直接写数据到vector要么出现bug，要么写不进去
    //3、要想向vector中存放元素，最好直接或者间接使用push_back或者insert
    vector<int> vec;
    vec.reserve(100);
    vec.push_back(101);
    vec[0] = 123;
    cout << "111" <<endl;
    istream_iterator<int> isi(cin);
    cout << "222" <<endl;
    copy(isi, istream_iterator<int>(), vec.begin());
    cout << "333" <<endl;

    copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, "  "));
    cout << "size() = " << vec.size() << endl;
    cout << "444" <<endl;
    cout << endl;
}

void test()
{
    vector<int> vec;
    istream_iterator<int> isi(cin);
    //vec.begin()的底层不会走push_back或者insert
    /* copy(isi, istream_iterator<int>(), vec.begin()); */
    //std::back_inserter的底层会调用push_back
    copy(isi, istream_iterator<int>(), std::back_inserter(vec));

    copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, "  "));
    cout << endl;
}
int main(int argc, char *argv[])
{
    test();
    return 0;
}

